Шаг 24 - Проходы отчета и вычисление формул.

На результаты вычислений по формулам большое влияние оказывает их место в отчете. Если нужна обработка каждой записи, формула должна находится в области подробностей (Details). Если нужна обработка промежуточных итогов, формула должна находится в колонтитуле группы, и т. д.

Однако расположение формулы в «правильном месте» само по себе не гарантирует правильность вычислений, особенно если в формуле используются переменные. Чтобы понять, давайте посмотрим последовательность формирования отчета.

Отчет формируется за три прохода. В документации Crystal Reports они называются evaluation time (время выполнения).

Before Reading Records (до чтения записей)		Проход выполняется до чтения любой записи базы данных. Если формула не содержит ссылок 
						на поля БД или промежуточные и общие итоги, она выполняется на этом проходе.
While Reading Records(во время чтения записей)	Проход выполняется во время чтения записей из БД, но перед любой их обработкой (группировкой, 
						сортировкой, выделением). При этом выполняются функции, содержащие ссылки на поля БД, но не 
						содержащие ссылок на промежуточные и общие итоги. В Crystal Reports эти формулы называются 
						формулы первого прохода
While Printing Records(во время печати записей)	Проход выполняется после чтения всех записей из БД, во время их обработки и форматирования, 
						но до показа отчета. Здесь выполняются формулы суммирования, подсчета среднего и.т.д, а также 
						формулы, содержащие ссылки на промежуточные и общие итоги. В Crystal Reports эти формулы 
						называются формулы второго прохода

Практика показывает, что в большинстве случаев в формулах Crystal Reports можно обойтись без переменных, но если вы их используете, будьте осторожны! Необходимо четко представлять время жизни переменной и моменты присвоения значений и модификации, иначе можете получить совсем не то, что ожидаете.

Для явного указания прохода, на котором должна вычисляться формула, в Crystal Reports имеет специальные функции. В окне формул Редактора формул они объединены в группу Evaluation time.

Пример:

WhilePrintingRecords;
CurrencyVar BonusTotal:=BonusTotal+{Orders.Bonus}

И напоследок, хоть и немного не по теме шага.

В Crystal Reports имеется группа функций Additional Functions. Эти функции экспортируются из внешних DLL (URL, User Function Library). И если вам нужна какая-то особая функция, вы можете ее написать и добавить к этой категории. Правда писать ее придется на каком-либо другом языке, поддерживающем создание DLL (например VC++).


Автор Юрий Гвоздев.
Hosted by uCoz